Baumer工业相机堡盟工业相机如何使用BGAPISDK联合Halcon进行读码识别(C#)

您所在的位置:网站首页 halcon 读码 Baumer工业相机堡盟工业相机如何使用BGAPISDK联合Halcon进行读码识别(C#)

Baumer工业相机堡盟工业相机如何使用BGAPISDK联合Halcon进行读码识别(C#)

2023-06-02 19:27| 来源: 网络整理| 查看: 265

Baumer工业相机堡盟工业相机如何使用BGAPISDK联合Halcon进行读码识别(C#) Baumer工业相机Baumer工业相机图像数据联合Halcon进行读码的技术背景Baumer工业相机使用BGAPISDK将图像数据转换为ImageSource方式1.引用合适的类文件2.使用BGAPISDK联合Halcon进行读码的方式 Baumer工业相机图像联合Halcon进行读码的优势Baumer工业相机图像联合Halcon进行读码的行业应用

Baumer工业相机

Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。

Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。 ​ Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。

Baumer工业相机图像数据联合Halcon进行读码的技术背景

工业相机图像数据联合Halcon进行读码的技术背景主要涉及到机器视觉和图像处理领域。

工业相机是一种专门用于工业生产过程中的图像采集设备,其主要功能是通过采集并处理物体的图像信息,实现自动化生产过程的监控和控制。而读码则是一种对于二维码、条形码等符号进行识别和解码的技术。

Halcon是一种流行的机器视觉开发工具,其提供了丰富的图像处理和分析功能,可以对工业相机采集的图像数据进行处理、分析和识别,实现对于二维码、条形码等符号的读码功能。

因此,将工业相机图像数据与Halcon进行联合,可以实现高效、准确的读码功能,为工业生产过程中的自动化监控和控制提供了有力的支持。

Baumer工业相机使用BGAPISDK将图像数据转换为ImageSource方式

下面介绍在C#里Baumer工业相机如何使用BGAPISDK转换原始图像数据为ImageSource的方式

1.引用合适的类文件

代码如下(示例):

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Data; using System.Globalization; using System.Diagnostics; using System.IO; using HalconDotNet; 2.使用BGAPISDK联合Halcon进行读码的方式

核心代码如下所示:

public ImageSource ToImageSource(BGAPI2.Buffer Image) { if (Image== null || Image.IsEmpty) { Debug.Print("ImageToImageSourceConverter: Image is null or empty"); return null; } else { Codes.Clear(); //Check for the Halcon-License (Dongle/File) if (HalconLicenseCheck()) { //NeoAPI.Image to Halcon-Image HImage hImage = new("byte", (int)Image.Width, (int)Image.Height, Image.ImageData); //Create HDataCode2DModel HDataCode2D hDataCode2D = new(); hDataCode2D.CreateDataCode2dModel("Data Matrix ECC 200", new HTuple(), new HTuple()); //Find DataCodes HXLDCont hXLDCont; hXLDCont = hImage.FindDataCode2d(hDataCode2D, "stop_after_result_num", "20", out HTuple resultHandle, out HTuple decodedDataStrings); //determine the coordinates for each code found for (int i = 0; i isChanged = true; width = System.Convert.ToInt32(Image.Width); } if (height != System.Convert.ToInt32(Image.Height)) { isChanged = true; height = System.Convert.ToInt32(Image.Height); } if (isChanged) { writeableBitmap = new WriteableBitmap(width, height, dpiX, dpiY, PixelFormats.Bgr24, null); backBuffer = writeableBitmap.BackBuffer; } transformedImage = Image.Convert("BGR8"); CopyMemory(backBuffer, transformedImage.ImageData, System.Convert.ToUInt32(transformedImage.Width) * System.Convert.ToUInt32(transformedImage.Height) * 3); Image.Dispose(); if(transformedImage!=null) transformedImage.Dispose(); //draw the writeableBitmap into a DrawingImage, draw a frame around the codes and draw text with the content next to it DrawingGroup dGroup = new(); Pen pen = new(Brushes.Lime, 10); if (writeableBitmap != null) { writeableBitmap.Lock(); writeableBitmap.AddDirtyRect(new Int32Rect(0, 0, width, height)); writeableBitmap.Unlock(); using DrawingContext dc = dGroup.Open(); dc.DrawImage(writeableBitmap, new Rect(0, 0, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight)); foreach (Code code in Codes) { dc.DrawLine(pen, code.TopLeft, code.TopRight); dc.DrawLine(pen, code.TopRight, code.BottomRight); dc.DrawLine(pen, code.BottomRight, code.BottomLeft); dc.DrawLine(pen, code.BottomLeft, code.TopLeft); Point TextPoint = new(code.TopRight.X, code.TopRight.Y - 250); Rect rect = new(TextPoint.X - 10, TextPoint.Y - 10, 600, 240); Pen rectPen = new(Brushes.DarkGreen, 10.0f); dc.DrawRectangle(Brushes.DarkGreen, rectPen, rect); FormattedText formattedText = new(code.Text, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Arial"), 46, Brushes.Lime, 96); dc.DrawText(formattedText, TextPoint); } } DrawingImage dImageSource = new(dGroup); return dImageSource; } } private static bool HalconLicenseCheck() { bool LicenseIsValid; try { HImage ho_ImageTest = new(); ho_ImageTest.GenImageConst("byte", 100, 100); LicenseIsValid = true; } catch(Exception ex) { Debug.Print("Exception during HalconLicenseCheck. Message = " + ex.Message); LicenseIsValid = false; } return LicenseIsValid; } Baumer工业相机图像联合Halcon进行读码的优势

工业相机图像联合Halcon进行读码的优势主要体现在以下几个方面:

高效准确:Halcon具备强大的图像处理和分析功能,可以对工业相机采集的图像数据进行高效、准确的处理和识别,提高读码的准确率和效率。

可定制性强:Halcon提供了丰富的图像处理算法和函数库,可以根据不同的应用场景和需求,进行定制化的二维码、条形码等符号的识别算法开发,提高读码的适应性和可靠性。

可扩展性强:Halcon支持多种编程语言和平台,可以与其他软件和硬件系统进行集成,实现更加完整和高效的工业自动化控制系统。

可追溯性强:通过Halcon对二维码、条形码等符号的读码,可以实现对产品生产、质量检测等环节的全程追溯,提高生产管理的效率和质量。

综上所述,工业相机图像联合Halcon进行读码具有高效准确、可定制性强、可扩展性强和可追溯性强等优势,可以为工业自动化生产提供更加可靠和高效的控制和管理。

Baumer工业相机图像联合Halcon进行读码的行业应用

工业相机图像联合Halcon进行读码在工业自动化领域有着广泛的应用,以下是几个行业应用的例子:

电子制造业:在电子制造过程中,需要对电子元器件和产品进行标识和追溯,工业相机图像联合Halcon进行二维码或条形码的读码,可以实现对于电子元器件和产品的识别和追溯。

医疗器械制造业:在医疗器械制造过程中,需要对器械进行标识和追溯,工业相机图像联合Halcon进行二维码的读码,可以实现对医疗器械的识别和追溯,提高医疗器械的质量和安全性。

物流行业:在物流行业中,需要对包裹、货物进行标识和追溯,工业相机图像联合Halcon进行二维码或条形码的读码,可以实现对包裹、货物的识别和追溯,提高物流运输的效率和质量。

食品制造业:在食品制造过程中,需要对食品进行标识和追溯,工业相机图像联合Halcon进行二维码或条形码的读码,可以实现对食品的识别和追溯,提高食品安全和质量。

综上所述,工业相机图像联合Halcon进行读码在电子制造、医疗器械制造、物流行业、食品制造等领域都有着广泛的应用,可以提高生产效率、产品质量和安全性,为企业的可持续发展提供有力的支持。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3